public class ThreadDemo10 {
    //谁先执行谁后执行是不确定的，只要start一个新的线程，主线程和新线程是并发执行的，
    //系统调度多个线程是无序的
    public static void main2(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            System.out.println("hello t");
        });
        t.start();

        /*等待一个线程，在main线程中调用join的意思就是main线程阻塞，等t线程
           执行完成之后再执行main线程*/
        t.join();
        System.out.println("hello main");
        //大部分情况是先执行hello main的
        //  ，当执行主线程的时候，新线程正在创建，创建线程也是需要消耗时间的
    }
    //public static boolean isQuit = false;
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("hello t");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        t.start(); //线程启动  代码执行到这一行：同时执行新创建的线程，也会执行主线程
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t.interrupt();//interrupt的作用：将标志位设置为true，唤醒最色的进程
        /*
        * 这里interrupt干两件事，1.将标志位设置为true，2.唤醒正在阻塞的进程
        * 这里sleep干了两件事，1.因为正在睡眠的过程中被唤醒了，所以会抛异常，2.清空标志位
        * */
    }
}
